#ifndef __INPUT_H
#define __INPUT_H

#include "stm32f10x.h"

// 输入有效电平定义
#define INPUT_ACTIVE_HIGH (0)   // 高电平有效
#define INPUT_ACTIVE_LOW  (1)   // 低电平有效

// 输入状态定义
#define INPUT_STATE_ACTIVE   (1)     // 输入有效状态
#define INPUT_STATE_INACTIVE (0)     // 输入无效状态
#define INPUT_STATE_ERROR    (255)   // 输入错误

#define INPUT_SHAKE_MUN (5)   // 去抖次数
#define PULSE_TIME      (7)

#define REFTIME    (3)                // 数据刷新时间
#define ACTIVETIME (1000 / REFTIME)   // 有效时间

// 输入通道结构体
typedef struct {
    GPIO_TypeDef*    GPIOx;         // GPIO端口
    uint16_t         GPIO_Pin;      // GPIO引脚
    uint8_t          activeLevel;   // 有效电平
    GPIOMode_TypeDef mode;          // 输入模式
    uint16_t         close_time;    // 去抖时间
    uint16_t         open_time;     // 去抖时间
    uint8_t          state;         // 状态
    uint16_t         pulse_time;    // 脉冲时间
    uint16_t         pulse_count;   // 脉冲个数
    uint16_t         active_time;   // 持续时间

} Input_Channel_t;

// 函数声明
void     Input_Init(void);
uint8_t  Input_Read(uint8_t channel);
void     DIN_Proc(void);
uint8_t  Get_input_state(uint8_t channel);
uint8_t  Get_pulse_count(uint8_t channel);
uint16_t Get_active_time(uint8_t channel);
#endif /* __INPUT_H */
